Visual Studio CodeでPythonの開発環境構築を構築してみた。
はじめに
好物はインフラとフロントエンドのかじわらゆたかです。
Pythonを開発するケースが出てきたので、O/S問わずに使えるVisual Studio Codeで環境を構築してみました。
目標としては、IntelliSenseが動くこと、Code Formatができること、Lintが動くこと、
pyenv環境のPythonが指定できること、Debugができること、
この辺りを調べてみたいと思います。
環境
- OS : OSX El Capitan (10.11.4)
- Visual Studio Code : 1.5.2
- Python : pyenv pyenv-virtualを用いてのバージョン切り替えを実施
導入方法
導入の手順としては、以下のような流れになります。
- PythonのVisual Studio Code拡張を導入する。
- Pythonの環境を構築する。
- プロジェクト用のディレクトリを作成し、作成したディレクトリをVisual Studio Codeから開く
Python用の拡張機能を導入
Python with Visual Studio Codeをもとに進めていきます。
拡張機能は複数あるようですが、ダウンロード数を多いPython - Visual Studio Marketplaceを選択しました。
Pythonの環境を構築する。
環境で記載したQiitaのPyenv導入の流れと同様になります。
* 参考: pyenv 利用のまとめ - Qiita
プロジェクト用のディレクトリを作成し、作成したディレクトリをVisual Studio Codeから開く
適当なディレクトリを作成し、そこにpythonの2.7.11を元としたVirtual Envを作成していきます。
mkdir pythonProject cd pythonProject pyenv virtualenv 2.7.11 projectStudy pyenv local projectStudy code ./
上記の最終行のcodeですが、これはターミナルからVisual Studio Codeを起動する。を有効にすることで扱えるようになるコマンドになります。
Visual Studio CodeによるRubyのデバッグ | Developers.IO
Intellisenceの挙動確認
新しいPythonファイルを作成し、入力してくなかで該当する関数があれば、候補として表示されます。
なお、候補の確定はTabキーを押下することで確定となるようです。
次に追加でライブラリを追加し、追加したライブラリの関数が補完されるか確認してみたいと思います。
題材としては、Amazon Web Services (AWS) SDK for Pythonであるboto3を対象としてみます。
当然、デフォルトの状態ではboto3は導入されていないので、自動補完の対象にも含まれておりません。
ViewからIntegrated Terminalを表示させて、以下の用に入力しboto3を導入します。
pip install boto3
その後自動補完でboto3が含まれていることが確認できます。
Lintの確認
ソースファイルの記載の揺れ等を抑制するためにLintツールを用いる事はよくあることですが、
Pythonには実に様々なLintのツールが存在します。
Visual Studio CodeのPython拡張はPylint,Pep8,Flake8に対応しています。
Linting · DonJayamanne/pythonVSCode Wiki
今回はFlake8でLintを行なってみたいと思います。
Visual Studio CodeのPython拡張でFlake8を用いる場合、Flake8がPythonのライブラリとして入っている必要があります。
導入は先ほどのboto3と同様です。
pip install flake8
次にflake8を用いる設定を行います。
Code → WorkspaceSettingで以下のように記載します。
Settings.json
{ "python.linting.flake8Enabled": true }
この拡張の仕様なのかWorkspaceSettingの内容はフォルダを開いたときに読み込まれるといった挙動をしたので、
この段階で作業対象のフォルダを開き直します。
次にLintで引っかかるようなPythonスクリプトを作成し、保存しようとした際にLintでのチェックが入ります。
以下のような例ですと、7箇所Lintでエラーと警告が出るはずです。
LintTarget.py
import sys # 余分な import import os def fib(): x = 0 # 使ってない変数 a, b = 1, 1 while True: yield a # 余分なスペース a, b = b, a + b if __name__ == '__main__': for i, num in enumerate(fib()): print(num) if i >= 9: break
参考 Python の Lint (文法チェッカ) まとめ - flake8 + hacking を使う - - Qiita
Code Formatの挙動確認
Lintで警告になる内容として、不要な改行といった内容も含まれます。
そういった内容に関しては、CodeFormatterで対応してしまおうと思います。
Visual Studio CodeのPython拡張はCode Formatterとして、AutoPep8,Yapfに対応しています。
今回はYapfを用いたCode Formatを実施してみたいと思います。
導入手順としてはLintと同様です。
ライブラリの導入を行い、設定ファイルに使う旨を記載します。
pip install yapf
Settings.json
{ "python.linting.flake8Enabled": true, "python.formatting.provider": "yapf" }
Visual Studio Codeを再起動させて、先ほどのフォルダ・ファイルを開いてみます。
先ほどと同じく7個のエラーが出ていると思います。
この状態でコードを全選択し、右クリックからFormat Codeを選択します。
コードの整形が実施されるので、ファイルを保存します。
Lintが実施され先ほど7つ出ていたエラーが4つに減っていることがわかります。
残っている警告は不使用な関数やImport式と最終行が空白で終わっていないといった内容となります。
それらを対応することでLintの警告を無くすことが可能です。
Debugの実施
Debugの環境構築については、以前Rubyでやったのとほぼ同一になります。
ですが、以前は手動で書いていたLaunch.jsonを自動で生成してくれるので、その方法を紹介します。
Debugのビューを開き、Configure or Fix 'Launch.json'を選択すると、Launch.jsonの雛形を選べる様になっています。
今回はもちろんPythonを選択します。
上記まで設定した後は、Rubyのときと同様BreakPoint等を設置すればDebug中に当該の箇所で止まりますし、
Watchで変数の中身を参照することも可能です。
Visual Studio CodeによるRubyのデバッグ | Developers.IO
まとめ
Rubyに引き続き、Pythonの環境もVisual Studio Codeで問題なく構築できそうです。